package com.coolingme.general;

/**
 * 代理主题角色，即代理类
 * <p>
 * 持有RealSubject的引用，因此具备完全对被代理类的代理权
 * <p>
 * 客户端调用代理对象的方法，同时也调用被代理对象的地方，并在方法前后做一些操作
 *
 * @author wangyue
 * @date 2020/9/30 14:03
 */
public class Proxy implements ISubject {

    /**
     * 被代理对象的引用
     */
    private ISubject subject;

    public Proxy(ISubject subject) {
        this.subject = subject;
    }

    @Override
    public void request() {
        this.beforeRequest();
        subject.request();
        this.afterRequest();
    }

    private void beforeRequest() {
        System.out.println("called before request().");
    }

    private void afterRequest() {
        System.out.println("called after request().");
    }


}
